// Copyright 2010 Alexandre Tristan St-Cyr <tristan.stcyr@gmail.com>

package com.codeplex.loadjava;


import com.codeplex.loadjava.model.ClassDefinition;
import com.codeplex.loadjava.model.Field;
import com.codeplex.loadjava.model.FieldDefinition;
import com.codeplex.loadjava.model.FieldReference;
import com.codeplex.loadjava.model.InterfaceImplementation;
import com.codeplex.loadjava.model.JavaClass;
import com.codeplex.loadjava.model.Method;
import com.codeplex.loadjava.model.MethodDefinition;
import com.codeplex.loadjava.model.MethodException;
import com.codeplex.loadjava.model.MethodInvocation;
import com.codeplex.loadjava.model.MethodParameter;
import com.codeplex.loadjava.model.TypeReference;


interface IJavaModelVisitor {
	
	void visitClassFile(String relativePath);
	
	void endVisitClassFile(String relativePath);
	
	void visitField(Field field);
	
	void visitMethod(Method method);
	
	void visitClass(JavaClass javaClass);
	
	void visitType(TypeReference typeReference);
	
	void visitFieldDefinition(FieldDefinition fieldDefinition);

	void visitMethodDefinition(MethodDefinition methodDefinition);
	
	void visitMethodException(MethodException methodException);

	void visitClassDefinition(ClassDefinition classDefinition);

	void visitFieldReference(FieldReference fieldReference);

	void visitMethodInvocation(MethodInvocation methodInvocation);

	void visitInterfaceImplementations(InterfaceImplementation interfaceImplementation);

	void visitMethodParameter(MethodParameter parameter);
}
